package jp.co.ledinge.syllabarygame;

import android.graphics.Rect;

/**
 * 文字の１ストローク分。Stroke[]は文字のデータ
 * Segmentを作るのに必要なクラス
 * 最後の座標はPEN_UPであること
 *
 */
public class Stroke {

	public static final int PEN_UP = -1;
	/** このストロークの外枠 (120dot * 120dotに変換するのに必要)*/
	public Rect boundingBox;
	/** このストロークのポイント配列 */
	public Point[]  points;
	/** このストロークの全長(使わないかも) */
	public int length;

	/**
	 * 座標からストローククラスを生成する。
	 * コンストラクタ生成時に外枠も計算する。
	 * @param points
	 */
	public Stroke(Point[] points) {
		this.points = points;
		extractBoundingBox(points);
	}
	/**
	 * ストロークの終了チェック
	 * PEN_UPが定義されているかをチェックする。
	 * @param po
	 * @return
	 */
	public static boolean isStrokeEnd(Point po) {
		boolean result = false;
		if (po.x == PEN_UP && po.y == PEN_UP) {
			result = true;
		}
		return result;
	}
	/**
	 * ストロークの終了
	 * PEN_UPを定義する。
	 * @return
	 */
	public static Point setStrokeEnd() {
		Point point = new Point(PEN_UP, PEN_UP);
		return point;
	}
	/**
	 * ストロークの特徴抽出 セグメントの長さを累計して, ストロークの長さを求める. また, ストロークに外接する枠の大きさを求める.
	 * (Pointの配列から外枠の大きさを求める。また、総長さ数を計算する)
	 * 
	 * @param points
	 */
	private void extractBoundingBox(Point[] points) {
		int count = points.length - 1; // Pen up除く
		Point[] pts = points;

		Rect bx = null;
		int len = 0;
		for (int i = 0; i < count; i++) {
			if (bx == null) {
				bx = new Rect(pts[i].x, pts[i].y, pts[i].x, pts[i].y);
			} else {
				len += Segment.calcLength(pts[i - 1], pts[i]);
				if (bx.left > pts[i].x)
					bx.left = pts[i].x;
				if (bx.right < pts[i].x)
					bx.right = pts[i].x;
				if (bx.top > pts[i].y)
					bx.top = pts[i].y;
				if (bx.bottom < pts[i].y)
					bx.bottom = pts[i].y;
			}
		}
		boundingBox = bx;
		length = len; // lengthいるのかな？
	}

}
